importPackage(Packages.de.elo.ix.client);
//@include lib_Class.js
//@include lib_moment.js
//@include lib_sol.common.DateUtils.js
//@include lib_sol.common.SordUtils.js
//@include lib_sol.common.ix.FunctionBase.js
var logger = sol.create("sol.Logger", { scope: "sol.common.ix.functions.IsoDate" });
/**
* Writes the current date as ISO date into a index field.
*
* Formats:
*
* - Standard: 'yyyyMMddHHmmss'
* - Without time: 'yyyyMMdd'
*
* # As workflow node
*
* `ObjId` is set based on the element that the workflow is attached to.
* Following configuration should be applied to the comments field.
*
* {
* "group": "COMPLETED_DATE",
* "withoutTime": true
* }
*
* # As IX function call
*
* In addition to the workflow node configuration the `objId` must be passed.
*
* sol.common.IxUtils.execute("RF_sol_function_ix_IsoDate", {
* objId: "4711",
* group: "COMPLETED_DATE",
* withoutTime: true
* });
*
* @author PZ, ELO Digital Office GmbH
* @version 1.0
*
* @eloix
* @requires moment
* @requires sol.common.DateUtils
* @requires sol.common.SordUtils
* @requires sol.common.JsonUtils
* @requires sol.common.WfUtils
* @requires sol.common.ix.RfUtils
* @requires sol.common.ix.FunctionBase
*/
sol.define("sol.common.ix.functions.IsoDate", {
extend: "sol.common.ix.FunctionBase",
requiredConfig: ["objId", "group"],
/**
* @cfg {String} objId (required)
* Object ID
*/
/**
* @cfg {String} group (required)
* Group field to write the change to
*/
/**
* @cfg {Boolean} [withoutTime=false] (optional)
* If `true`, the time will be omitted from the ISO string
*/
withoutTime: false,
/**
* @cfg {Boolean} [adjustToConnectionTimeZone=false]
* Adjust the date to the connection time zone
*/
adjustToConnectionTimeZone: false,
initialize: function (config) {
var me = this;
me.$super("sol.common.ix.FunctionBase", "initialize", [config]);
},
/**
* Sets the ISO date.
*/
process: function () {
var me = this,
utcOffset, sord, dateField, isoString;
sord = ixConnect.ix().checkoutSord(me.objId, SordC.mbAllIndex, LockC.NO);
dateField = sol.common.SordUtils.getObjKey(sord, me.group);
if (!dateField) {
return;
}
if (me.adjustToConnectionTimeZone && me.timeZone) {
utcOffset = sol.common.SordUtils.getTimeZoneOffset(me.timeZone);
}
isoString = sol.common.DateUtils.nowIso({ withoutTime: me.withoutTime, utcOffset: utcOffset });
dateField.data = [isoString];
ixConnect.ix().checkinSord(sord, SordC.mbAllIndex, LockC.NO);
me.logger.info("Write current ISO date: objId=" + me.objId + ", objKey=" + me.group +
", adjustToConnectionTimeZone=" + me.adjustToConnectionTimeZone + ", conn.timeZone=" + me.timeZone +
", utcOffset=" + utcOffset + ", isoDate=" + isoString);
}
});
/**
* @member sol.common.ix.functions.IsoDate
* @static
* @inheritdoc sol.common.ix.FunctionBase#onEnterNode
*/
function onEnterNode(clientInfo, userId, wFDiagram, nodeId) {
logger.enter("onEnterNode_IsoDate", { flowId: wFDiagram.id, nodeId: nodeId });
var params = sol.common.WfUtils.parseAndCheckParams(wFDiagram, nodeId, "group"),
module;
params.objId = wFDiagram.objId;
params.timeZone = clientInfo.timeZone;
module = sol.create("sol.common.ix.functions.IsoDate", params);
module.process();
logger.exit("onEnterNode_IsoDate");
}
/**
* @member sol.common.ix.functions.IsoDate
* @static
* @inheritdoc sol.common.ix.FunctionBase#onExitNode
*/
function onExitNode(clientInfo, userId, wFDiagram, nodeId) {
logger.enter("onExitNode_IsoDate", { flowId: wFDiagram.id, nodeId: nodeId });
var params = sol.common.WfUtils.parseAndCheckParams(wFDiagram, nodeId, "group"),
module;
params.objId = wFDiagram.objId;
params.timeZone = clientInfo.timeZone;
module = sol.create("sol.common.ix.functions.IsoDate", params);
module.process();
logger.exit("onExitNode_IsoDate");
}
/**
* @member sol.common.ix.functions.IsoDate
* @method RF_sol_function_IsoDate
* @static
* @inheritdoc sol.common.ix.FunctionBase#RF_FunctionName
*/
function RF_sol_function_IsoDate(ec, args) {
var params, module;
logger.enter("RF_sol_function_IsoDate", args);
params = sol.common.ix.RfUtils.parseAndCheckParams(ec, arguments.callee.name, args, "objId", "group");
params.timeZone = ec.ci.timeZone;
module = sol.create("sol.common.ix.functions.IsoDate", params);
module.process();
logger.exit("RF_sol_function_IsoDate");
}